package com.project.server;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public class Request {

    private String url;
    private Map<String,String> paramMap = new HashMap<>();

    public Request(InputStream in){

        byte[] byteArray = new byte[1024];
        try {
            in.read(byteArray);

            String s = new String(byteArray).trim();
            System.out.println(s);
            String[] array = s.split("\\s+");

            if (array[0].equals("POST")){
                this.post(array);
            }
            if (array[0].equals("GET")){
                if (array[1].indexOf("?") != -1){
                    this.get(array);
                }
                else {
                    //处理GET文件请求
                    this.url =  array[1].substring(1);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        //读出来之后，把该字节数组转为字符串类型，去掉前后两端的空格
        String s = new String(byteArray).trim();
        //打印后台信息到控制台
        System.out.println(s);
    }

    /**
     * 处理POST请求
     * @param array 需要处理的信息数组
     */
    private void post(String[] array){
        this.url =  array[1].substring(1);
       String str = array[array.length-1];
        this.mapPut(str);

    }

    /**
     * 处理GET业务请求
     * @param array 需要处理的信息数组
     */
    private void get(String[] array){
        this.url =  array[1].substring(1,array[1].indexOf("?"));
        String str = array[1].substring(array[1].indexOf("?")+1);

        this.mapPut(str);
    }

    /**将形如a=1&b=2封装成map集合
     * @param str 要添加的字符串
     */
    private void mapPut(String str){

        String[] str1 = str.split("&");
        for (int i = 0; i < str1.length;i++){
            String[] s =  str1[i].split("=");
            //避免添加的时候，下标越界异常
            if (s.length == 2){
                this.paramMap.put(s[0],s[1]);
            }
            else {
                this.paramMap.put(s[0],"");
            }

        }
    }

    public String getUrl() {
        return url;
    }

    public Map<String, String> getParamMap() {
        return paramMap;
    }

    /**
     * 根据表单名，得到表单值
     * @param key  表单名
     * @return  表单值
     */
    public String getParameter(String key){
        return this.paramMap.get(key);
    }

    @Override
    public String toString() {
        return "Test{" +
                "url='" + url + '\'' +
                ", paramMap=" + paramMap +
                '}';
    }


}
